/*
eval
*/

var repl = require('repl');
var vm = require('vm');
var self = this;

repl.start({
	eval: myEval
});

// 修改默认的eval属性值，在REPL运行环境中输入一条表达式后，显示形式如下
// 输入命令：[cmd...]
// 运行结果：
// [result...]
function myEval(cmd, context, file, callback){
	var err, result;
	try{
		if(self.useGlobal) {
			console.log("输入命令：" + cmd.replace('\n', ''));
			result = vm.runInThisContext(cmd, file);
			console.log("运行结果：");
		}else{
			console.log("输入命令：" + cmd.replace('\n', ''));
			result = vm.runInContext(cmd, context, file);
			console.log("运行结果：");
		}
	}
	catch(e){
		err = e;
	}
	if(err && process.domain && !isSyntaxError(err)){
		process.domain.emit('error', err);
		process.domain.exit();
	}
	else{
		callback(err, result);
	}
}


// 默认的eval属性值
function eval(cmd, context, file, callback) {
	var err, result;
	try{
		if(self.useGlobal) {
			result = vm.runInThisContext(cmd, file);
		}else{
			result = vm.runInContext(cmd, context, file);
		}
	}
	catch(e){
		err = e;
	}

	if(err && process.domain && !isSyntaxError(err)){
		process.domain.emit('error', err);
		process.domain.exit();
	}
	else{
		callback(err, result);
	}
}